﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LibSolPedI;
using SAP.Middleware.Connector;
using WebLibSolPedBE;

namespace LibSolPedDALC
{
    public class PedidoAbiertoDALC : IPedidoAbierto
    {
        private PedidoAbiertoDALC() { }
        private static volatile PedidoAbiertoDALC _instance = null;

        public static PedidoAbiertoDALC Instance() {
            if (_instance == null)
            {
                lock (typeof(PedidoAbiertoDALC))
                {
                    if (_instance == null)
                    {
                        _instance = new PedidoAbiertoDALC();
                    }
                }
            }
            return _instance;
        }

        public List<PedidoAbiertoCabBE> getLstPedidoAbiertoCab()
        {

            List<PedidoAbiertoCabBE> lst = new List<PedidoAbiertoCabBE>();

            IRfcFunction function = null;
            RfcDestination dest = null;
            DestConfig dc = new DestConfig();
            try
            {
                function = DALC.rfcRep.CreateFunction("ZMOVIL_MM_GET_PED_ABIERTO_CAB");

                function.Invoke(DALC.rfcDest);
                IRfcTable T_RETORNO = function.GetTable("T_PEDIDO_CAB");
                foreach (IRfcStructure item in T_RETORNO)
                {
                    PedidoAbiertoCabBE it = new PedidoAbiertoCabBE();


                    it.EBELN = item["EBELN"].GetString();
                    it.BEDAT = item["BEDAT"].GetString();
                    it.ERNAM = item["ERNAM"].GetString();
                    it.LIFNR = item["LIFNR"].GetString();
                    it.KTWRT = item["KTWRT"].GetString();
                    it.WAERS = item["WAERS"].GetString();
                    it.FRGGR = item["FRGGR"].GetString();
                    it.VALOR1 = item["VALOR1"].GetString();
                    it.VALOR2 = item["VALOR2"].GetString();
                    it.VALOR3 = item["VALOR3"].GetString();
                    it.VALOR4 = item["VALOR4"].GetString();
                    it.VALOR5 = item["VALOR5"].GetString();
                    lst.Add(it);
                }
            }
            catch (Exception e)
            {

            }

            return lst;
        }


        public List<PedidoAbiertoDetBE> getLstPedidoAbiertoDet(string EBELN)
        {

            List<PedidoAbiertoDetBE> lst = new List<PedidoAbiertoDetBE>();

            IRfcFunction function = null;
            RfcDestination dest = null;
            DestConfig dc = new DestConfig();
            try
            {
                function = DALC.rfcRep.CreateFunction("ZMOVIL_MM_GET_PED_ABIERTO_DET");
                function.SetValue("IV_EBELN", EBELN);
                function.Invoke(DALC.rfcDest);
                IRfcTable T_RETORNO = function.GetTable("T_PEDIDO_DET");
                foreach (IRfcStructure item in T_RETORNO)
                {
                    PedidoAbiertoDetBE it = new PedidoAbiertoDetBE();

                    it.EBELP = item["EBELP"].GetString();
                    it.TXZ01 = item["TXZ01"].GetString();
                    it.MEINS = item["MEINS"].GetString();
                    it.KTMNG = item["KTMNG"].GetString();
                    it.NETPR = item["NETPR"].GetString();
                    it.WERKS = item["WERKS"].GetString();
                    it.WAERS = item["WAERS"].GetString();
                    it.VALOR1 = item["VALOR1"].GetString();
                    it.VALOR2 = item["VALOR2"].GetString();
                    it.VALOR3 = item["VALOR3"].GetString();
                    it.VALOR4 = item["VALOR4"].GetString();
                    it.VALOR5 = item["VALOR5"].GetString();
                    lst.Add(it);
                }
            }
            catch (Exception e)
            {

            }

            return lst;
        }

        public string setLstPedidoAbiertoDet(List< PedidoAbiertoCabBE> lst)
        {
            String ret = "Resultado de libetación: <br>" + Environment.NewLine;
            try
            {   
                foreach (PedidoAbiertoCabBE it in lst)
                {   
                    IRfcFunction function = null;
                    function = DALC.rfcRep.CreateFunction("ZMOVIL_MM_PEDID_ABIERTO_LIBERA");
                    function.SetValue("IV_EBELN",it.EBELN);
                    function.SetValue("IV_FRGCO",it.FRGGR);
                    function.Invoke(DALC.rfcDest);
                    IRfcTable T_RETORNO = function.GetTable("T_RETURN");
                    foreach (IRfcStructure item in T_RETORNO)
                    {
                        ret = ret + "  -" + item["MESSAGE"].GetString() + ". <br>";
                    }
                    ret = ret + "<br>" + Environment.NewLine;
                }
            }
            catch (Exception ex)
            {
                ret = ret + "<br>" + "Error en el resto de documentos";
            }
            return ret;   
        }
    }
}
